package com.hb.A_基础.function

/**
 * kotlin函数语法：
 * fun 函数名（参数名：参数类型）：返回值类型{
 *      函数体
 * }
 */
class Demo01 {

}

fun main() {
    println(double(2))
    val byteArrayOf = byteArrayOf(1, 2, 3).toTypedArray()
    read(byteArrayOf)
    println(plus(1, 2))

    //函数高级
    //匿名函数
    var i={num1: Int,num2: Int->num1+num2}
    //(kotlin.Int, kotlin.Int) -> kotlin.Int
    println(i)
    //3
    println(i(1, 2))
}

/**
 * 函数参数使⽤ Pascal 表⽰法定义，即 name: type。参数⽤逗号隔开。每个参数必须有显式类型：
 */
fun double(x: Int): Int {
    return 2 * x
}

/**
默认参数:
函数参数可以有默认值，当省略相应的参数时使⽤默认值。与其他语⾔相⽐，这可以减少重载数量：
 **/
fun read(
    b: Array<Byte>,
    off: Int = 0,
    len: Int = b.size
) {
    for (byte in b) {
        println(byte)
    }
}
/**
 *函数练习：简单计算器
 *      :Int表示返回值的类型就是Int
 */
fun plus(num1:Int,num2:Int):Int{
    return num1+num2
}

/**
 *
 * 练习1
 *
 */
fun sayHello(name:String):String{
    return "hello $name"
}

/**
 *
 * 练习1
 *
 */
fun checkAge(age:Int):Boolean{
    return age>18;
}

/**
 *
 * 练习1
 *
 */
fun saveLog(logLevel:Int){
    println(logLevel)

}

/**
 *
 *函数高级
 * 1. 如果返回值只有一行，可以省略
 */
fun add(num1: Int,num2: Int):Int=num1+num2


/**
 *具名参数和默认参数
 * 例：获取长方形的面积
 */
fun getArea(width:Int,len: Int):Int{
    return width * len


}